using System;
using System.Collections.Generic;

class BankasKonts
{
    private static int nākamaisKontaNumurs = 1000; // statiskā mainīgā vērtība, lai nodrošinātu unikālus konta numurus
    private int kontaNumurs;
    private string īpašnieks;
    private decimal atlikums;

    // konstruktors, kas inicializē konta īpašnieku, sākuma atlikumu un automātiski piešķir unikālu konta numuru
    public BankasKonts(string īpašnieks, decimal sākumaAtlikums)
    {
        this.kontaNumurs = nākamaisKontaNumurs++; // Piešķir unikālu konta numuru un palielina nākamo numuru
        this.īpašnieks = īpašnieks;
        this.atlikums = sākumaAtlikums;
    }

    // destruktors, kas tiek izsaukts, kad objekts tiek iznīcināts
    ~BankasKonts()
    {
        Console.WriteLine($"Konts {kontaNumurs} tika iznīcināts.");
    }

    // metode naudas noguldīšanai kontā
    public void Noguldīt(decimal summa)
    {
        if (summa <= 0)
        {
            throw new ArgumentException("Noguldījuma summa jābūt lielāka par 0."); // izņēmums, ja summa ir nederīga
        }
        atlikums += summa; // palielina konta atlikumu
        Console.WriteLine($"Noguldīti {summa} EUR. Jaunais atlikums: {atlikums} EUR.");
    }

    // Metode naudas izņemšanai no konta
    public void Izņemt(decimal summa)
    {
        if (summa <= 0)
        {
            throw new ArgumentException("Izņemšanas summa jābūt lielāka par 0."); // izņēmums, ja summa ir nederīga
        }
        if (summa > atlikums)
        {
            throw new InvalidOperationException("Nepietiek līdzekļu kontā."); // izņēmums, ja kontā nav pietiekami daudz naudas
        }
        atlikums -= summa; // Samazina konta atlikumu
        Console.WriteLine($"Izņemti {summa} EUR. Jaunais atlikums: {atlikums} EUR.");
    }

    // metode konta informācijas parādīšanai
    public void ParādītInformāciju()
    {
        Console.WriteLine($"Konta numurs: {kontaNumurs}");
        Console.WriteLine($"Īpašnieks: {īpašnieks}");
        Console.WriteLine($"Atlikums: {atlikums} EUR");
    }

    // Metode, lai iegūtu konta numuru (privātā īpašība, kas nav tieši pieejama)
    public int GetKontaNumurs()
    {
        return kontaNumurs;
    }
}

class Program
{
    static Dictionary<int, BankasKonts> konti = new Dictionary<int, BankasKonts>(); // datu struktūra kontu glabāšanai

    static void Main()
    {
        while (true)
        {
            Console.WriteLine("\nBankas kontu pārvaldīšanas sistēma");
            Console.WriteLine("-----------------------------------");
            Console.WriteLine("1. Izveidot jaunu bankas kontu");
            Console.WriteLine("2. Noguldīt naudu kontā");
            Console.WriteLine("3. Izņemt naudu no konta");
            Console.WriteLine("4. Parādīt konta informāciju");
            Console.WriteLine("5. Dzēst kontu");
            Console.WriteLine("6. Iziet no sistēmas");
            Console.Write("Jūsu izvēle: ");

            string izvēle = Console.ReadLine();
            try
            {
                switch (izvēle)
                {
                    case "1":
                        IzveidotKontu();
                        break;
                    case "2":
                        NoguldītNaudu();
                        break;
                    case "3":
                        IzņemtNaudu();
                        break;
                    case "4":
                        ParādītInformāciju();
                        break;
                    case "5":
                        DzēstKontu();
                        break;
                    case "6":
                        return; // iziet no programmas
                    default:
                        Console.WriteLine("Nederīga izvēle. Mēģiniet vēlreiz.");
                        break;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Kļūda: {ex.Message}"); // kļudu apstrāde, lai izvairitos no programmas avarijas
            }
        }
    }

    // metode jauna konta izveidei
    static void IzveidotKontu()
    {
        Console.Write("Ievadiet konta īpašnieka vārdu: ");
        string īpašnieks = Console.ReadLine();
        Console.Write("Ievadiet sākuma atlikumu: ");
        decimal sākumaAtlikums = decimal.Parse(Console.ReadLine());

        BankasKonts konts = new BankasKonts(īpašnieks, sākumaAtlikums);
        konti[konts.GetKontaNumurs()] = konts; // Saglabā kontu vārdnīcā ar unikālu konta numuru

        Console.WriteLine($"Konts izveidots! Konta numurs: {konts.GetKontaNumurs()}");
    }

    // metode naudas noguldīšanai kontā
    static void NoguldītNaudu()
    {
        Console.Write("Ievadiet konta numuru: ");
        int kontaNumurs = int.Parse(Console.ReadLine());
        if (!konti.ContainsKey(kontaNumurs))
        {
            Console.WriteLine("Konts nav atrasts.");
            return;
        }

        Console.Write("Ievadiet noguldījuma summu: ");
        decimal summa = decimal.Parse(Console.ReadLine());
        konti[kontaNumurs].Noguldīt(summa);
    }

    // metode naudas izņemšanai no konta
    static void IzņemtNaudu()
    {
        Console.Write("Ievadiet konta numuru: ");
        int kontaNumurs = int.Parse(Console.ReadLine());
        if (!konti.ContainsKey(kontaNumurs))
        {
            Console.WriteLine("Konts nav atrasts.");
            return;
        }

        Console.Write("Ievadiet izņemšanas summu: ");
        decimal summa = decimal.Parse(Console.ReadLine());
        konti[kontaNumurs].Izņemt(summa);
    }

    // metode konta informācijas parādīšanai
    static void ParādītInformāciju()
    {
        Console.Write("Ievadiet konta numuru: ");
        int kontaNumurs = int.Parse(Console.ReadLine());
        if (!konti.ContainsKey(kontaNumurs))
        {
            Console.WriteLine("Konts nav atrasts.");
            return;
        }

        konti[kontaNumurs].ParādītInformāciju();
    }

    // metode konta dzēšanai
    static void DzēstKontu()
    {
        Console.Write("Ievadiet konta numuru: ");
        int kontaNumurs = int.Parse(Console.ReadLine());
        if (!konti.ContainsKey(kontaNumurs))
        {
            Console.WriteLine("Konts nav atrasts.");
            return;
        }

        konti.Remove(kontaNumurs); // noņem kontu no vārdnīcas
        Console.WriteLine($"Konts {kontaNumurs} tika dzēsts.");
    }
}
